package com.baijia.commons.config;

import com.google.common.collect.Lists;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

import lombok.Data;

/**
 * @title PassportClientConfig
 * @desc 客户端配置信息
 * @author caoliang
 * @date 2015年12月1日
 * @version 1.0
 */
@Data
@Component
public class PassportClientConfig {
    /** 当前系统唯一标识 */
    @Value("${passport.id}")
    private String id;

    /** 当前系统账户类型 */
    @Value("${passport.appId}")
    private String appId;

    /** 客户端访问地址 */
    @Value("${passport.client.serverName}")
    private String clientName;

    /** 客户端登录地址 */
    @Value("${passport.client.serverLoginAddr}")
    private String clientLoginAddr;

    /** Passport登录地址 */
    @Value("${passport.server.login}")
    private String serverLogin;

    /** Passport验证ST地址 */
    @Value("${passport.server.validate}")
    private String serverValidate;

    @Value("${passport.server.gainStUrl}")
    private String gainStUrl;

    /** Passport登出地址 */
    @Value("${passport.server.logout}")
    private String serverLogout;

    @Value("${passport.server.passcode}")
    private String sendPasscode;

    /** 白名单url */
    private List<String> clientInnocentUrl;

    @Value("${passport.client.ignoreUrl}")
    private String clientInnocentUrls;

    /** 白名单url正则表达式 */
    private List<String> clientInnocentRegex;

    @Value("${passport.client.ignoreUrlRegex}")
    private String clientInnocentRegexs;

    /** 是否使用重定向，没登录的时候如果不使用重定向，会返回status为700的状态码，由前端进行重定向 **/
    @Value("${passport.client.redirect}")
    private Boolean redirect;

    @Value("${passport.cookieMaxAge}")
    private String cookieMaxAge;

    public static final String SEND_PASSCODE_PATH = "/sendPasscode.do";
    public static final String LOGIN_PATH = "/login.do";

    public List<String> getClientInnocentRegex() {
        if (clientInnocentRegex == null) {
            List<String> clientInnocentRegex = Lists.newArrayList();
            if (StringUtils.isNotBlank(clientInnocentRegexs)) {
                for (String regex : clientInnocentRegexs.split(",")) {
                    clientInnocentRegex.add(regex);
                }
            }
            this.clientInnocentRegex = clientInnocentRegex;
        }
        return clientInnocentRegex;
    }

    public List<String> getClientInnocentUrl() {
        if (clientInnocentUrl == null) {
            List<String> clientInnocentUrls = Lists.newArrayList();
            if (StringUtils.isNotBlank(this.clientInnocentUrls)) {
                for (String innocentUrl : this.clientInnocentUrls.split(",")) {
                    clientInnocentUrls.add(innocentUrl);
                }
            }
            this.clientInnocentUrl = clientInnocentUrls;
        }
        return clientInnocentUrl;
    }
}
